Large enterprises organize their computing resources into multiple data centers, each data center being a pool of computing resources and storage that may be physically separated from the other data centers. Enterprise applications run in one or more data centers and the end users' requests to the applications flow into one or more datacenters. When a data center is overloaded with the requests, it is necessary to offload some of the workload to available shared resources in other data centers so that the end users receive an expected level of application response and also that all resources of the enterprise are used effectively.
In a variation of the multi-data center model, an enterprise might purchase resources from a third party service provider and use those resources as a data center of its own. The need for offloading workload to the service provider resources exists in this model, as well, as it is similar to the multi-datacenter workload offloading problem.
Existing solutions to workload off-loading include a weighted round-robin distribution of user requests using Domain Name Service (DNS) or Transmission Control Protocol/Internet Protocol (TCP/IP) routing products. The problem with this solution is that the routing products are only capable of statically routing user requests in a certain proportion (i.e., based on weights), but they are not capable of dynamically adjusting resource allocation to user requests based on service level agreements.